package jobascjp;

class CardBoard {

    Short story = 200;
    CardBoard go(CardBoard cb){
        cb = null;
        return cb;
    }
    public static void main(String[] args) {
        CardBoard c1 = new CardBoard();
        CardBoard c2 = new CardBoard();
        CardBoard c3 = c1.go(c2);
        c1 = null;
        // do stuff
    }
    
    /*
     * When do Stuff is reached how many objects are eligible for GC?
     * 0
     * 1
     * 2 // korrekt
     * Compilation fails
     * It is not possible to know
     * An exception is thrown at runtime.
     * 
     * Anmerkungen:
     * Es ist nur c1 fuer die GC interessant, aber darin ist ein 
     * Short-Wrapper-Objekt verpackt, also sind insgesamt 2 Objekte eligible.
     * Garbage Collection arbeitet auf dem Heap, dort leben nur Objekte und 
     * deren Instanzvariablen, lokale Variablen leben auf dem Stack, diese 
     * spielen in GarbageCollector-Fragen also keine Rolle. In diesem Fall 
     * haben wir also zwei Objekte c1 und c2, der Debugger bestaetigt dies.
     * c1 wird also auf dem Heap erzeugt und dann wird die Adresse in der 
     * lokalen Variable auf dem Stack hinterlegt. Jetzt wird mit c1 und c2 
     * gearbeitet, bis c1 ploetzlich genullt wird, dann greift der GC zu.
     */
    
}
